package com.ting.test.aspect;

import com.ting.test.enums.ChannelEnum;
import com.ting.test.util.ConcurrentHashMapUtil;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;


/**
 *
 * @author 雷霆
 * @version 1.0.0
 * @date$ 2018/1/17
 *
 * Description：
 *
 * Modification History:
 *
 */
@Slf4j
@Aspect
public class RateLimiterAspect {

    @Pointcut("execution (* com.ting.test.aspect.TestInterface.*(..))")
    private void anyMethod() {}//声明一个切入点


    @Before("anyMethod()&&args(channel,reqNo,token)")
    public void doRateLimiter(ChannelEnum channel, String reqNo, String token) {
        try{
            if(ConcurrentHashMapUtil.isAllowed(channel)){
                log.info("开始发送，请求号：{}",reqNo);
            }else{
                //将reqNo 重新放回池中
                //  log.info("超过限制,停止发送:");
            }

        }catch (Exception e){
            log.error("RateLimiter-限流模块异常",e);

        }
    }

}
